/**
 * 现代化技能效果类型定义
 * 为可配置的技能效果系统提供完整的类型支持
 */

import { BattleParticipant, BattleEffect } from '../../battle/types';

// 重新导出类型供其他模块使用
export { BattleEffect, BattleParticipant };

/**
 * 技能效果执行上下文
 */
export interface SkillEffectContext {
    /** 技能ID */
    skillId: string;
    /** 施法者 */
    caster: BattleParticipant;
    /** 目标列表 */
    targets: BattleParticipant[];
    /** 技能数据 */
    skillData: any;
    /** 堆叠计数 */
    stackCount: number;
    /** 效果索引 */
    effectIndex: number;
    /** 战斗上下文 */
    battleContext?: any;
    /** 额外参数 */
    params?: Record<string, any>;
}

/**
 * 技能效果结果
 */
export interface SkillEffectResult {
    /** 是否成功执行 */
    success: boolean;
    /** 产生的战斗效果 */
    battleEffects: BattleEffect[];
    /** 影响的目标 */
    affectedTargets: string[];
    /** 效果描述 */
    description: string;
    /** 是否触发了特殊事件 */
    triggeredEvents?: string[];
    /** 额外数据 */
    metadata?: Record<string, any>;
}

/**
 * 技能效果类型枚举
 */
export enum SkillEffectType {
    // 基础伤害类型
    DAMAGE = 'damage',
    PHYSICAL_DAMAGE = 'physical_damage',
    MAGICAL_DAMAGE = 'magical_damage',
    TRUE_DAMAGE = 'true_damage',
    
    // 治疗类型
    HEAL = 'heal',
    REGENERATION = 'regeneration',
    
    // 护盾类型
    SHIELD = 'shield',
    ABSORB_SHIELD = 'absorb_shield',
    
    // Buff/Debuff类型
    ADD_BUFF = 'add_buff',
    REMOVE_BUFF = 'remove_buff',
    
    // 属性修改类型
    ATTRIBUTE_MODIFY = 'attribute_modify',
    TEMPORARY_ATTRIBUTE = 'temporary_attribute',
    
    // 状态类型
    STUN = 'stun',
    SILENCE = 'silence',
    ROOT = 'root',
    BLIND = 'blind',
    
    // 特殊效果类型
    TELEPORT = 'teleport',
    SWAP_POSITION = 'swap_position',
    SUMMON = 'summon',
    
    // 资源操作类型
    MANA_BURN = 'mana_burn',
    MANA_STEAL = 'mana_steal',
    ENERGY_RESTORE = 'energy_restore',
    
    // 复合效果类型
    CHAIN_EFFECT = 'chain_effect',
    AREA_EFFECT = 'area_effect',
    CONDITIONAL_EFFECT = 'conditional_effect',
    
    // 永久提升类型
    PERMANENT_BOOST = 'permanent_boost',
    SKILL_UPGRADE = 'skill_upgrade'
}

/**
 * 技能效果配置接口
 */
export interface SkillEffectConfig {
    /** 效果类型 */
    type: SkillEffectType;
    /** 效果强度/数值 */
    power: number;
    /** 目标类型 */
    targetType: 'self' | 'ally' | 'enemy' | 'all';
    /** 持续时间（回合数） */
    duration?: number;
    /** 触发概率 */
    probability?: number;
    /** 条件配置 */
    conditions?: EffectCondition[];
    /** 额外参数 */
    params?: Record<string, any>;
    /** 效果描述模板 */
    descriptionTemplate?: string;
}

/**
 * 效果触发条件
 */
export interface EffectCondition {
    /** 条件类型 */
    type: 'health_threshold' | 'mana_threshold' | 'target_count' | 'critical_hit' | 'kill' | 'custom';
    /** 条件参数 */
    params: Record<string, any>;
    /** 是否反转条件 */
    negate?: boolean;
}

/**
 * 技能效果处理器接口
 */
export interface ISkillEffectHandler {
    /** 效果类型 */
    readonly effectType: SkillEffectType;
    /** 处理器优先级 */
    readonly priority: number;
    
    /** 是否可以处理该效果 */
    canHandle(context: SkillEffectContext): boolean;
    
    /** 执行效果 */
    execute(context: SkillEffectContext, config: SkillEffectConfig): Promise<SkillEffectResult>;
    
    /** 验证配置 */
    validateConfig(config: SkillEffectConfig): boolean;
    
    /** 获取效果描述 */
    getDescription(config: SkillEffectConfig, context?: SkillEffectContext): string;
}

/**
 * 技能修饰符接口
 */
export interface SkillModifier {
    /** 修饰符类型 */
    type: 'damage_multiplier' | 'cooldown_reduction' | 'range_increase' | 'cost_reduction';
    /** 修饰符值 */
    value: number;
    /** 应用条件 */
    condition?: EffectCondition;
    /** 来源描述 */
    source: string;
}

/**
 * 技能学习和升级配置
 */
export interface SkillLearningConfig {
    /** 学习条件 */
    requirements: {
        level?: number;
        skills?: string[];
        attributes?: Record<string, number>;
        items?: string[];
    };
    /** 升级配置 */
    upgrade: {
        maxLevel: number;
        expPerLevel: number[];
        powerGrowth: number;
        cooldownReduction?: number;
        newEffectsPerLevel?: Record<number, SkillEffectConfig[]>;
    };
}

/**
 * 技能冷却配置
 */
export interface SkillCooldownConfig {
    /** 基础冷却时间 */
    baseCooldown: number;
    /** 全局冷却时间 */
    globalCooldown?: number;
    /** 冷却类型 */
    cooldownType: 'turns' | 'time' | 'charges';
    /** 最大充能数 */
    maxCharges?: number;
    /** 充能恢复时间 */
    chargeRecoveryTime?: number;
}

/**
 * 技能目标选择配置
 */
export interface SkillTargetConfig {
    /** 目标数量 */
    targetCount: number | 'all';
    /** 目标类型 */
    targetType: 'self' | 'ally' | 'enemy' | 'any';
    /** 选择策略 */
    selectionStrategy: 'manual' | 'random' | 'nearest' | 'furthest' | 'lowest_hp' | 'highest_hp';
    /** 范围限制 */
    range?: number;
    /** 区域效果 */
    areaEffect?: {
        shape: 'circle' | 'line' | 'cone' | 'square';
        size: number;
        affectsAllies?: boolean;
        affectsEnemies?: boolean;
    };
}

/**
 * 现代化技能定义
 */
export interface ModernSkill {
    /** 技能ID */
    id: string;
    /** 技能名称 */
    name: string;
    /** 技能描述 */
    description: string;
    /** 技能类型 */
    type: 'active' | 'passive' | 'aura' | 'trigger';
    /** 技能品质 */
    quality: number;
    /** 技能分类 */
    category: string;
    /** 技能图标 */
    icon?: string;
    
    /** 技能效果列表 */
    effects: SkillEffectConfig[];
    /** 目标配置 */
    targeting: SkillTargetConfig;
    /** 冷却配置 */
    cooldown: SkillCooldownConfig;
    /** 资源消耗 */
    resourceCost?: {
        type: 'mana' | 'energy' | 'health';
        amount: number;
    };
    
    /** 学习和升级配置 */
    learning?: SkillLearningConfig;
    /** 技能修饰符 */
    modifiers?: SkillModifier[];
    /** 触发条件（被动技能用） */
    triggerConditions?: EffectCondition[];
    
    /** 技能标签 */
    tags?: string[];
    /** 互斥技能组 */
    exclusiveGroup?: string;
    /** 前置技能 */
    prerequisites?: string[];
}

/**
 * 技能实例状态
 */
export interface SkillInstance {
    /** 基础技能定义 */
    baseSkill: ModernSkill;
    /** 当前等级 */
    level: number;
    /** 当前经验 */
    experience: number;
    /** 使用次数 */
    useCount: number;
    /** 当前冷却 */
    currentCooldown: number;
    /** 当前充能数 */
    currentCharges?: number;
    /** 永久提升 */
    permanentBoosts: Map<string, number>;
    /** 临时修饰符 */
    temporaryModifiers: SkillModifier[];
    /** 自定义数据 */
    customData: Map<string, any>;
}

/**
 * 技能使用请求
 */
export interface SkillUseRequest {
    /** 技能ID */
    skillId: string;
    /** 施法者ID */
    casterId: string;
    /** 目标ID列表 */
    targetIds: string[];
    /** 强制使用（忽略冷却等限制） */
    forceUse?: boolean;
    /** 额外参数 */
    params?: Record<string, any>;
}

/**
 * 技能使用结果
 */
export interface SkillUseResult {
    /** 是否成功 */
    success: boolean;
    /** 技能ID */
    skillId: string;
    /** 施法者ID */
    casterId: string;
    /** 实际目标ID列表 */
    actualTargetIds: string[];
    /** 产生的效果 */
    effects: SkillEffectResult[];
    /** 资源消耗 */
    resourceConsumed: {
        type: string;
        amount: number;
    };
    /** 冷却设置 */
    cooldownSet: number;
    /** 失败原因 */
    failureReason?: string;
    /** 经验获得 */
    experienceGained?: number;
    /** 是否触发升级 */
    leveledUp?: boolean;
}
